package first.endtoend.parse

import first.endtoend.Level
import grails.validation.ValidationException
import org.springframework.transaction.annotation.Transactional

/*
@author : A.Olfa
 */

@Transactional
class ParseCSVLevelService
{

    def Level levelInstance

    def parseLevels(String filepath, boolean header)
    {
        println("####################### JE PASSE DANS PARSE LEVEL #############")
        println("####################### PATH = " + filepath + " #############")
        def parse = new File(filepath).readLines()[1..-1]
        println("####################### APRES FILE #######################")
        Level parentInstance
        def token = ';'

        for (line in parse)
        {
            // create a levelInstance and specify its properties

            line.splitEachLine(token) { fields ->
                println ""
                println ""

                println "####################### Fields ==> " + fields[0] + "  " + fields[1] + "#######################"
                if (fields[0].compareTo("null") != 0)
                {
                    println("####################### DEBUT FIELDS[0] != null " + fields[0].compareTo("null") + " != 0  #######################")
                    parentInstance = Level.findByName(fields[0])
                    println("####################### Level.findByName(fields[0]) #######################")
                    levelInstance = new Level(name: fields[1], parentLevel: parentInstance)
                    println("####################### FIN IF #######################")
                } else
                {
                    println("####################### FIELDS[0] == null #######################")
                    levelInstance = new Level(name: fields[1], parentLevel: null)
                    println("#######################FIN ELSE #######################")
                }
                println("####################### AVANT VALIDATE #######################")
                if (!levelInstance.validate())
                {
                    println("####################### DANS LE  VALIDATE #######################")
                    throw new ValidationException("level is not valid", levelInstance.errors)
                } else
                {
                    println("####################### ELSE VALIDATE\nLEVEL VALIDE AVANT SAVE #######################")
                    levelInstance.save(flush: true)
                    println("####################### LEVEL SAVE #######################")
                }


                println("####################### AVANT ERROR #######################")
                if (levelInstance.hasErrors())
                {
                    println levelInstance.errors
                }
                println("####################### APRES EROR #######################")

                println ""
                println ""
            }
        }
        println("####################### SORTIT PARSE LEVEL #######################")
    }
}